{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "eb6d39f5-02e7-477f-a095-c286a55e2eb2",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "from torch.nn import MSELoss\n",
    "\n",
    "from uniphm.data import Dataset\n",
    "from uniphm.data.loader.XJTULoader import XJTULoader\n",
    "from uniphm.data.labeler.BearingRulLabeler import BearingRulLabeler\n",
    "from uniphm.data.process.EntityPipeline import EntityPipeline\n",
    "from uniphm.data.process.array.RMSProcessor import RMSProcessor\n",
    "from uniphm.engine.metric.PHM2008Score import PHM2008Score\n",
    "from uniphm.engine.metric.PHM2012Score import PHM2012Score\n",
    "from uniphm.engine.metric.PercentError import PercentError\n",
    "from uniphm.engine.metric.MAE import MAE\n",
    "from uniphm.engine.metric.MSE import MSE\n",
    "from uniphm.engine.metric.RMSE import RMSE\n",
    "from uniphm.data.process.entity.ThreeSigmaFPTCalculator import ThreeSigmaFPTCalculator\n",
    "from uniphm.engine.tester.BaseTester import BaseTester\n",
    "from uniphm.engine.trainer.BaseTrainer import BaseTrainer\n",
    "from uniphm.model.basic.CNN import CNN\n",
    "from uniphm.engine.Evaluator import Evaluator\n",
    "from uniphm.engine.callback.CheckGradientsCallback import CheckGradientsCallback\n",
    "from uniphm.engine.callback.EarlyStoppingCallback import EarlyStoppingCallback\n",
    "from uniphm.engine.callback.TensorBoardCallback import TensorBoardCallback\n",
    "from uniphm.util.Cache import Cache\n",
    "from uniphm.util.Plotter import Plotter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d6babd9a-174e-4cdb-a953-1312b425cc8c",
   "metadata": {},
   "outputs": [],
   "source": [
    "cache_dataset = True\n",
    "# cache_dataset = False\n",
    "# cache_model = True\n",
    "cache_model = False\n",
    "\n",
    "Plotter.DPI = 50\n",
    "Plotter.SIZE = (10, 6)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bd8e4461-f48c-446f-9a33-fccc2ad757ec",
   "metadata": {},
   "source": [
    "# 获取数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "1d805976-0455-4da5-8f71-e37296e5b620",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[DEBUG   17:26:20]  [Cache]  -> Loading cache file: .\\cache\\prognosis_bearing_dataset.pkl\n",
      "[DEBUG   17:26:21]  [Cache]  ✓ Successfully loaded: .\\cache\\prognosis_bearing_dataset.pkl\n"
     ]
    }
   ],
   "source": [
    "dataset = Cache.load('prognosis_bearing_dataset', is_able=cache_dataset)\n",
    "if dataset is None:\n",
    "    data_loader = XJTULoader('D:\\\\data\\\\dataset\\\\XJTU-SY_Bearing_Datasets')\n",
    "    labeler = BearingRulLabeler(2048, is_from_fpt=False, is_rectified=True)\n",
    "\n",
    "    pipeline = EntityPipeline()\n",
    "    pipeline.register(\n",
    "        processor=RMSProcessor(data_loader['continuum']),\n",
    "        input_key='Horizontal Vibration',\n",
    "        output_key='H_RMS'\n",
    "    )\n",
    "    pipeline.register(\n",
    "        processor=ThreeSigmaFPTCalculator(),\n",
    "        input_key='H_RMS',\n",
    "    )\n",
    "\n",
    "    dataset = Dataset()\n",
    "    for bearing_name in ['Bearing1_1', 'Bearing1_2', 'Bearing1_3',\n",
    "                         'Bearing2_1', 'Bearing2_2',\n",
    "                         'Bearing3_1', 'Bearing3_2']:\n",
    "        bearing = data_loader(bearing_name, 'Horizontal Vibration')\n",
    "        pipeline.execute(bearing)\n",
    "        dataset.append_entity(labeler(bearing, key='Horizontal Vibration'))\n",
    "    Cache.save(dataset, 'prognosis_bearing_dataset')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "40a97bfa-1b70-4a4b-ba9e-a735567073ac",
   "metadata": {},
   "source": [
    "# 划分测试集、训练集、验证集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "3d9d8d0a-a7c1-4d2d-85a5-ec7e591e97ed",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[INFO    17:26:24]  [Dataset]  Splitting data by ratio 0.3 using random seed: 67830870658552767772883172833623311716\n"
     ]
    }
   ],
   "source": [
    "test_set = dataset.include(['Bearing1_1', 'Bearing1_3'])\n",
    "train_set = dataset.exclude(['Bearing1_1', 'Bearing1_3'])\n",
    "val_set, train_set = train_set.split_by_ratio(0.3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2fa02e31-5bdf-4561-a67f-41d79de6ca7a",
   "metadata": {},
   "source": [
    "# 配置测试算法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "1491b103-71b1-4c7f-835e-344fec6a7a52",
   "metadata": {},
   "outputs": [],
   "source": [
    "test_config = {\n",
    "    'device': torch.device('cuda' if torch.cuda.is_available() else 'cpu'),\n",
    "    'dtype': torch.float32,\n",
    "}\n",
    "tester = BaseTester(config=test_config)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8d915554-7b88-4c43-9085-7512c7be98de",
   "metadata": {},
   "source": [
    "# 配置训练算法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "b3e9a8c3-fb2b-4d12-9b4b-c93c26b5206a",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_config = {\n",
    "    'device': torch.device('cuda' if torch.cuda.is_available() else 'cpu'),\n",
    "    'dtype': torch.float32,\n",
    "    'epochs': 20,\n",
    "    'batch_size': 256,\n",
    "    'lr': 0.01,\n",
    "    'weight_decay': 0.0,\n",
    "    'criterion': MSELoss(),\n",
    "    'callbacks': [\n",
    "        EarlyStoppingCallback(patience=5,\n",
    "                              val_set=val_set,\n",
    "                              metric=RMSE(),\n",
    "                              tester=tester),\n",
    "        TensorBoardCallback(),\n",
    "        CheckGradientsCallback()\n",
    "    ]\n",
    "}\n",
    "trainer = BaseTrainer(config=train_config)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9a63c87c-2e14-4546-8685-03fff81ee779",
   "metadata": {},
   "source": [
    "# 定义模型并训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "477a2880-80e5-4440-be74-b7e0963f03d5",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[INFO    17:26:28]  \n",
      "[Trainer]  Start training by BaseTrainer:\n",
      "\ttraining set: Bearing1_2; Bearing2_1; Bearing2_2;…\n",
      "\tdevice: cuda\n",
      "\tdtype: torch.float32\n",
      "\tepochs: 20\n",
      "\tbatch_size: 256\n",
      "\tlr: 0.01\n",
      "\tweight_decay: 0.0\n",
      "\tcriterion: MSELoss()\n",
      "\tcallbacks: [EarlyStoppingCallback, TensorBoardCallback, CheckGradientsCallback]\n",
      "\toptimizer: Adam\n",
      "[DEBUG   17:26:29]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 1.0003\n",
      "[INFO    17:26:32]  [BaseTrainer]  Epoch [1/20], MSELoss:0.0257\n",
      "[DEBUG   17:26:32]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 0.0905\n",
      "[WARNING 17:26:32]  [CheckGradients] se3.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:32]  [CheckGradients] se3.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:32]  [CheckGradients] se3.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:32]  [CheckGradients] fc1.weight gradient is very small: 8.16e-06\n",
      "[INFO    17:26:35]  [BaseTrainer]  Epoch [2/20], MSELoss:0.0071\n",
      "[DEBUG   17:26:35]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 0.0748\n",
      "[WARNING 17:26:36]  [CheckGradients] se1.excitation.2.weight gradient is very small: 1.05e-06\n",
      "[WARNING 17:26:36]  [CheckGradients] se3.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:36]  [CheckGradients] se3.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:36]  [CheckGradients] se3.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:36]  [CheckGradients] fc1.weight gradient is very small: 9.77e-06\n",
      "[INFO    17:26:38]  [BaseTrainer]  Epoch [3/20], MSELoss:0.0064\n",
      "[DEBUG   17:26:39]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 0.0742\n",
      "[WARNING 17:26:39]  [CheckGradients] se3.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:39]  [CheckGradients] se3.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:39]  [CheckGradients] se3.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[INFO    17:26:42]  [BaseTrainer]  Epoch [4/20], MSELoss:0.0061\n",
      "[DEBUG   17:26:42]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 0.0793\n",
      "[DEBUG   17:26:42]  [EarlyStopping]  No improvement for [1/5] epochs\n",
      "[WARNING 17:26:42]  [CheckGradients] se2.excitation.2.weight gradient is very small: 8.65e-06\n",
      "[WARNING 17:26:42]  [CheckGradients] se3.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:42]  [CheckGradients] se3.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:42]  [CheckGradients] se3.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[INFO    17:26:45]  [BaseTrainer]  Epoch [5/20], MSELoss:0.0059\n",
      "[DEBUG   17:26:45]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 0.0723\n",
      "[WARNING 17:26:46]  [CheckGradients] se1.excitation.2.weight gradient is very small: 9.89e-06\n",
      "[WARNING 17:26:46]  [CheckGradients] se2.excitation.2.weight gradient is very small: 3.72e-06\n",
      "[WARNING 17:26:46]  [CheckGradients] se3.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:46]  [CheckGradients] se3.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:46]  [CheckGradients] se3.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:46]  [CheckGradients] fc1.weight gradient is very small: 2.85e-06\n",
      "[INFO    17:26:48]  [BaseTrainer]  Epoch [6/20], MSELoss:0.0052\n",
      "[DEBUG   17:26:49]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 0.0694\n",
      "[WARNING 17:26:49]  [CheckGradients] se2.excitation.2.weight gradient is very small: 8.64e-06\n",
      "[WARNING 17:26:49]  [CheckGradients] se3.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:49]  [CheckGradients] se3.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:49]  [CheckGradients] se3.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:49]  [CheckGradients] fc1.weight gradient is very small: 1.76e-06\n",
      "[INFO    17:26:52]  [BaseTrainer]  Epoch [7/20], MSELoss:0.0054\n",
      "[DEBUG   17:26:52]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 0.0701\n",
      "[DEBUG   17:26:52]  [EarlyStopping]  No improvement for [1/5] epochs\n",
      "[WARNING 17:26:53]  [CheckGradients] conv3.weight gradient is very small: 7.08e-06\n",
      "[WARNING 17:26:53]  [CheckGradients] se3.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:53]  [CheckGradients] se3.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:53]  [CheckGradients] se3.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:53]  [CheckGradients] fc1.weight gradient is very small: 5.40e-07\n",
      "[INFO    17:26:55]  [BaseTrainer]  Epoch [8/20], MSELoss:0.0054\n",
      "[DEBUG   17:26:56]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 0.0757\n",
      "[DEBUG   17:26:56]  [EarlyStopping]  No improvement for [2/5] epochs\n",
      "[WARNING 17:26:56]  [CheckGradients] se1.excitation.2.weight gradient is very small: 9.97e-06\n",
      "[WARNING 17:26:56]  [CheckGradients] se2.excitation.0.bias gradient is very small: 8.38e-06\n",
      "[WARNING 17:26:56]  [CheckGradients] se2.excitation.2.weight gradient is very small: 8.39e-06\n",
      "[WARNING 17:26:56]  [CheckGradients] se3.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:56]  [CheckGradients] se3.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:56]  [CheckGradients] se3.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:56]  [CheckGradients] fc1.weight gradient is very small: 4.92e-06\n",
      "[INFO    17:26:58]  [BaseTrainer]  Epoch [9/20], MSELoss:0.0050\n",
      "[DEBUG   17:26:59]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 0.0694\n",
      "[WARNING 17:26:59]  [CheckGradients] se3.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:59]  [CheckGradients] se3.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:59]  [CheckGradients] se3.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:26:59]  [CheckGradients] fc1.weight gradient is very small: 3.56e-06\n",
      "[INFO    17:27:02]  [BaseTrainer]  Epoch [10/20], MSELoss:0.0050\n",
      "[DEBUG   17:27:02]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 0.0670\n",
      "[WARNING 17:27:03]  [CheckGradients] se2.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:03]  [CheckGradients] se2.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:03]  [CheckGradients] se2.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:03]  [CheckGradients] se3.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:03]  [CheckGradients] se3.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:03]  [CheckGradients] se3.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:03]  [CheckGradients] fc1.weight gradient is very small: 6.39e-06\n",
      "[INFO    17:27:06]  [BaseTrainer]  Epoch [11/20], MSELoss:0.0052\n",
      "[DEBUG   17:27:06]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 0.0699\n",
      "[DEBUG   17:27:06]  [EarlyStopping]  No improvement for [1/5] epochs\n",
      "[WARNING 17:27:06]  [CheckGradients] se1.excitation.2.weight gradient is very small: 3.56e-06\n",
      "[WARNING 17:27:06]  [CheckGradients] se2.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:06]  [CheckGradients] se2.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:06]  [CheckGradients] se2.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:06]  [CheckGradients] se2.excitation.2.bias gradient is very small: 5.66e-06\n",
      "[WARNING 17:27:06]  [CheckGradients] conv3.weight gradient is very small: 3.45e-06\n",
      "[WARNING 17:27:06]  [CheckGradients] se3.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:06]  [CheckGradients] se3.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:06]  [CheckGradients] se3.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:06]  [CheckGradients] fc1.weight gradient is very small: 2.73e-06\n",
      "[INFO    17:27:08]  [BaseTrainer]  Epoch [12/20], MSELoss:0.0049\n",
      "[DEBUG   17:27:09]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 0.0802\n",
      "[DEBUG   17:27:09]  [EarlyStopping]  No improvement for [2/5] epochs\n",
      "[WARNING 17:27:09]  [CheckGradients] se2.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:09]  [CheckGradients] se2.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:09]  [CheckGradients] se2.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:09]  [CheckGradients] conv3.weight gradient is very small: 4.94e-06\n",
      "[WARNING 17:27:09]  [CheckGradients] se3.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:09]  [CheckGradients] se3.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:09]  [CheckGradients] se3.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:09]  [CheckGradients] fc1.weight gradient is very small: 1.95e-06\n",
      "[INFO    17:27:12]  [BaseTrainer]  Epoch [13/20], MSELoss:0.0047\n",
      "[DEBUG   17:27:12]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 0.0687\n",
      "[DEBUG   17:27:12]  [EarlyStopping]  No improvement for [3/5] epochs\n",
      "[WARNING 17:27:13]  [CheckGradients] se2.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:13]  [CheckGradients] se2.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:13]  [CheckGradients] se2.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:13]  [CheckGradients] conv3.weight gradient is very small: 5.54e-06\n",
      "[WARNING 17:27:13]  [CheckGradients] se3.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:13]  [CheckGradients] se3.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:13]  [CheckGradients] se3.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:13]  [CheckGradients] fc1.weight gradient is very small: 5.87e-07\n",
      "[INFO    17:27:15]  [BaseTrainer]  Epoch [14/20], MSELoss:0.0046\n",
      "[DEBUG   17:27:16]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 0.0667\n",
      "[WARNING 17:27:16]  [CheckGradients] se2.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:16]  [CheckGradients] se2.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:16]  [CheckGradients] se2.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:16]  [CheckGradients] se3.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:16]  [CheckGradients] se3.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:16]  [CheckGradients] se3.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:16]  [CheckGradients] fc1.weight gradient is very small: 2.50e-06\n",
      "[INFO    17:27:18]  [BaseTrainer]  Epoch [15/20], MSELoss:0.0045\n",
      "[DEBUG   17:27:19]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 0.0731\n",
      "[DEBUG   17:27:19]  [EarlyStopping]  No improvement for [1/5] epochs\n",
      "[WARNING 17:27:19]  [CheckGradients] se1.excitation.2.weight gradient is very small: 5.33e-06\n",
      "[WARNING 17:27:19]  [CheckGradients] se2.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:19]  [CheckGradients] se2.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:19]  [CheckGradients] se2.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:19]  [CheckGradients] se3.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:19]  [CheckGradients] se3.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:19]  [CheckGradients] se3.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:19]  [CheckGradients] fc1.weight gradient is very small: 1.21e-06\n",
      "[INFO    17:27:22]  [BaseTrainer]  Epoch [16/20], MSELoss:0.0046\n",
      "[DEBUG   17:27:22]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 0.0662\n",
      "[WARNING 17:27:23]  [CheckGradients] se2.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:23]  [CheckGradients] se2.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:23]  [CheckGradients] se2.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:23]  [CheckGradients] se3.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:23]  [CheckGradients] se3.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:23]  [CheckGradients] se3.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:23]  [CheckGradients] fc1.weight gradient is very small: 2.45e-06\n",
      "[INFO    17:27:25]  [BaseTrainer]  Epoch [17/20], MSELoss:0.0046\n",
      "[DEBUG   17:27:26]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 0.0659\n",
      "[WARNING 17:27:26]  [CheckGradients] se2.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:26]  [CheckGradients] se2.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:26]  [CheckGradients] se2.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:26]  [CheckGradients] se3.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:26]  [CheckGradients] se3.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:26]  [CheckGradients] se3.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:26]  [CheckGradients] fc1.weight gradient is very small: 1.95e-06\n",
      "[INFO    17:27:28]  [BaseTrainer]  Epoch [18/20], MSELoss:0.0045\n",
      "[DEBUG   17:27:28]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 0.0786\n",
      "[DEBUG   17:27:28]  [EarlyStopping]  No improvement for [1/5] epochs\n",
      "[WARNING 17:27:29]  [CheckGradients] se1.excitation.2.weight gradient is very small: 5.03e-06\n",
      "[WARNING 17:27:29]  [CheckGradients] se2.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:29]  [CheckGradients] se2.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:29]  [CheckGradients] se2.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:29]  [CheckGradients] se3.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:29]  [CheckGradients] se3.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:29]  [CheckGradients] se3.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:29]  [CheckGradients] fc1.weight gradient is very small: 9.34e-07\n",
      "[INFO    17:27:32]  [BaseTrainer]  Epoch [19/20], MSELoss:0.0047\n",
      "[DEBUG   17:27:32]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 0.0669\n",
      "[DEBUG   17:27:32]  [EarlyStopping]  No improvement for [2/5] epochs\n",
      "[WARNING 17:27:32]  [CheckGradients] se2.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:32]  [CheckGradients] se2.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:32]  [CheckGradients] se2.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:32]  [CheckGradients] conv3.weight gradient is very small: 7.78e-06\n",
      "[WARNING 17:27:32]  [CheckGradients] se3.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:32]  [CheckGradients] se3.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:32]  [CheckGradients] se3.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:32]  [CheckGradients] fc1.weight gradient is very small: 9.62e-07\n",
      "[INFO    17:27:35]  [BaseTrainer]  Epoch [20/20], MSELoss:0.0044\n",
      "[DEBUG   17:27:36]  [EarlyStopping]  On the validation set Bearing1_2; Bearing2_1; Bearing2_2; Bearing3_1; Bearing3_2, the RMSE is 0.0656\n",
      "[WARNING 17:27:36]  [CheckGradients] se2.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:36]  [CheckGradients] se2.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:36]  [CheckGradients] se2.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:36]  [CheckGradients] se2.excitation.2.bias gradient is very small: 9.41e-06\n",
      "[WARNING 17:27:36]  [CheckGradients] conv3.weight gradient is very small: 4.60e-06\n",
      "[WARNING 17:27:36]  [CheckGradients] se3.excitation.0.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:36]  [CheckGradients] se3.excitation.0.bias gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:36]  [CheckGradients] se3.excitation.2.weight gradient is very small: 0.00e+00\n",
      "[WARNING 17:27:36]  [CheckGradients] fc1.weight gradient is very small: 8.56e-07\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 500x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[DEBUG   17:27:36]  [Cache]  Generating cache file: .\\cache\\prognosis_bearing_model.pkl\n",
      "[DEBUG   17:27:36]  [Cache]  Generated cache file: .\\cache\\prognosis_bearing_model.pkl\n"
     ]
    }
   ],
   "source": [
    "model = Cache.load('prognosis_bearing_model', cache_model)\n",
    "if model is None:\n",
    "    model = CNN(2048, 1, end_with_sigmoid=False)\n",
    "    # 开始训练\n",
    "    losses = trainer.train(model=model, train_set=train_set)\n",
    "    Plotter.loss(losses)\n",
    "    Cache.save(model, 'prognosis_bearing_model')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "87f60c15-5836-4fec-b6b4-0beb9b367684",
   "metadata": {},
   "source": [
    "# 测试模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "f6a33153-ba2c-4f8d-b9dc-99bcb1290b21",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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Q11TKtQQfn1EhauesuA6P6w2OZyNdzXkzCFk32bl0KKJPHNfhTbPvFVKPpm6G9/2nnfgqiuVcMERI0TRNlPq87m99tprPP3009x///1ezf3aa6/x73//m6lTp3LixAlSU1OZPHkyaWlpDBgwgMjISL799luysrJ49tln6dq1K2PGjNHOz8nJISQkRNuZP3jwILt27eLBBx/kscceIzw8nPDwcH766SfWrVvH6NGjufPOO/n++++9klcQhOaLzWbjmmuuoaKiokavHwBGI7zxBkyeDGlp8Pnn0KpV4wjqhvo4qFzhXKVdrRMESgV454K088dfzspdR1hQ5UmfkZygpXQCWrV5VZeo6zFnB5W7tWJDRUe2VLzV5S1Jj4ux3sxoqB89b4x+V6HtdUUtSlcT7lra6Q1C582Gmn4sXd0zNT8p1RyrbSQ4523XhicGv6c/Qu4iApw3OGobz9m77twxoKZ74g21KSl33zP1/v9w6BSb844DaAXjakIvt16hqiH7/eIi+D9dBFL6AKXY4VqntABefRV++1vYvZvMPWdE0TZD6rNAuueeexgxYgT33nsvU6ZMoX379hQVFdGmTRuOHTvG1VdfXev548aNA5RwunbtlMVeZWUlc+bM0cJV//CHPxASEoLRaHQIYbXb7Q6Lbv3/KysrueOOO7jiiisAWLVqFSEhIQCEhobW6ToFQWiBBAfDihVw220wfjx8+imEhflbqgZDH+2pRgiOMcdU1djZrRns+o5GgJbyp+8stHhDHpfGRrC3sKTaenJWSiKPjU3U5qytB72k1XmHt7q8JelxMdabGI3l5XNlrPlibnVMtVJ9qjm2Wpu22nYpXfUadw6tdi4yVluf99XZBVo/8B0HT1BDYJlb9HO6M9w93Qhwl8/vHCJe24+a3ruu7xhQX9x9N2pTUu42BdT7f+/wHhSUlDNrTGKd59Yr1NlVCvW2ARfxf7pz1cIwK7Ydckz7+M1vICsLy53TKf/9Ipf1D4SmTX0XSK1ateLKK69k1apV3HvvvcyZM4eOHTtSWVnJFVdcwSeffMK8efNo3749gwYN4q677qp1zIceeoi7776bDh06MHDgQO6++26eeuopevTo4XCc2WymtLSUWbNmER8fz+9+9zv27dvH888/z4MPPsif/vQnOnfuTEREBI899hgPP/wwRUVFHDx40KtrFQShhWEy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DfcF8M033zB79mwGDBjAihUr6vTnsGn3TKnIyEjzF05JSYmHW+N5TqeTadOmMXz4cPr168eJEycA11SoyMhID7fOM7Zu3cqOHTtYuXIlK1eu5Pjx44Bv9wm4/u20atUKKPvLxJf7ZenSpfzpT38iPT2ddevWmd/35T6pjNEf+v0Lu3fv5pVXXmHhwoXA5Zjkq/1RW972s+Stsdhb46m3xkNfiWneFpO8Ma4cOHCAEydOMHXqVL755hs+//xzr7gvgJtuuomAgABatWpFYWFhnf4cekU1+KKiIp566imCg4P5+c9/3mTWp9SXhQsX8v7779OvXz/69OnD+fPnOXz4sLmep6muJ6sL7733Hm3btmXv3r3qE+D8+fM8/fTTXHfddfTo0YNWrVrxj3/8gwsXLvDGG280ubVsdWH37t2kpKTQtm1bmjdvzq233urTfXLy5En+8Ic/sGnTJiZMmEDnzp3L9Afgc79/3fvk0Ucf5fXXX2f48OEEBgYyY8YM/P39mT59OgEBAYwbN464uDhPN7lJ8LZY7u2x2NviqbfGQ2+Lad4ak7w1rpT///X8888DMHr0aD755BOOHj3qFffVrVs3MjIyKCoqYt68eVx33XV19nPoFcm6iIiIiIiIiDfximnwIiIiIiIiIt5EybqIiIiIiIhII6NkXURERERERKSRUbIu4oUuXLjAb3/7W+69917uvPNOunbtyrZt22p9vffee4/MzMwrHvPCCy9w4cKFCt+32Ww89dRTtX5vERERX6M4LiIAAZ5ugIjUvZCQEN566y22bt3K7t27ad68OYWFhbz33ntkZGQQEhJChw4dsNvt7N69m48//pht27axbt06Lly4wKhRo4iPjzevt3nzZpKTk694/vfff4/D4SA5OZnu3btz5MgREhMTiY+PJyQkhB9//JEOHTp4sFdERESaBsVxEQGNrIv4nISEBN566y22b9/OrFmzuO2228jKymLhwoWEhYXRoUMH/vWvf5nHFxYW1uh8dxMmTGDOnDn87W9/A6B3795s3769/m9ORETEyymOi/gOjayL+JgWLVoAEB4eDkBgYCA2m42SkhJmzJhBQEDZXwuFhYXmOVc6312zZs0ICAgwv9+qVSuOHj1aPzckIiLiQxTHRXyHknURAWDSpElMmDCB1q1b07dvX8aMGQNAREQEJ0+evKZr79+/n969e9dFM0VERKQSiuMi3sfP6XQ6Pd0IEWncpk2bxu9//3tatmxZq/OTk5NZvHgxFouljlsmIiIi1VEcF2malKyLSLV++OEHCgsL6dmz51Wfa7PZyMzMJC4urh5aJiIiItVRHBdpmpSsi4iIiIiIiDQyqgYvIiIiIiIi0sgoWRcRERERERFpZJSsi4iIiIiIiDQy/x+HGzYJwFj+3AAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1000x300 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "'default'"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result = tester.test(model, test_set)\n",
    "Plotter.rul_end2end(test_set, result, is_scatter=True, label_x='Time (min)', label_y='Relative RUL')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fcb97fd6-d323-4c5e-804f-a63a2731a431",
   "metadata": {},
   "source": [
    "# 预测结果评价"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "da84327a-8925-47fe-b2d6-cadec7d055bd",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\project\\UniPHM（开源）\\uniphm\\engine\\metric\\PHM2012Score.py:33: RuntimeWarning: overflow encountered in exp\n",
      "  np.exp(np.log(0.5) * (percent_error / 20)))\n",
      "[INFO    17:27:36]  \n",
      "[Evaluator]  Performance Evaluation:\n",
      "                 MAE     MSE    RMSE PercentError PHM2012Score PHM2008Score\n",
      "Bearing1_1    0.0794  0.0174  0.1319        8.23%       0.6843      12.4227\n",
      "Bearing1_3    0.1272  0.0382  0.1955      -17.35%       0.4833      32.6267\n",
      "mean(global)  0.1062  0.0291  0.1706       -5.57%       0.5713      45.0494\n",
      "mean(group)   0.1062  0.0291  0.1677       -6.15%       0.5713      23.7830\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>MAE</th>\n",
       "      <th>MSE</th>\n",
       "      <th>RMSE</th>\n",
       "      <th>PercentError</th>\n",
       "      <th>PHM2012Score</th>\n",
       "      <th>PHM2008Score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Bearing1_1</th>\n",
       "      <td>0.0794</td>\n",
       "      <td>0.0174</td>\n",
       "      <td>0.1319</td>\n",
       "      <td>8.23%</td>\n",
       "      <td>0.6843</td>\n",
       "      <td>12.4227</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Bearing1_3</th>\n",
       "      <td>0.1272</td>\n",
       "      <td>0.0382</td>\n",
       "      <td>0.1955</td>\n",
       "      <td>-17.35%</td>\n",
       "      <td>0.4833</td>\n",
       "      <td>32.6267</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean(global)</th>\n",
       "      <td>0.1062</td>\n",
       "      <td>0.0291</td>\n",
       "      <td>0.1706</td>\n",
       "      <td>-5.57%</td>\n",
       "      <td>0.5713</td>\n",
       "      <td>45.0494</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean(group)</th>\n",
       "      <td>0.1062</td>\n",
       "      <td>0.0291</td>\n",
       "      <td>0.1677</td>\n",
       "      <td>-6.15%</td>\n",
       "      <td>0.5713</td>\n",
       "      <td>23.7830</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 MAE     MSE    RMSE PercentError PHM2012Score PHM2008Score\n",
       "Bearing1_1    0.0794  0.0174  0.1319        8.23%       0.6843      12.4227\n",
       "Bearing1_3    0.1272  0.0382  0.1955      -17.35%       0.4833      32.6267\n",
       "mean(global)  0.1062  0.0291  0.1706       -5.57%       0.5713      45.0494\n",
       "mean(group)   0.1062  0.0291  0.1677       -6.15%       0.5713      23.7830"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "evaluator = Evaluator()\n",
    "evaluator.add(MAE(), MSE(), RMSE(), PercentError(), PHM2012Score(), PHM2008Score())\n",
    "evaluator(test_set, result)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
